import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.List;

public class _39_外观数列_递归 {
    @Test
    public void test(){
        System.out.println(countAndSay(5));
    }

    /**
     * 思路：使用递归找到低n-1字符串，然后遍历字符串输出结果，递归终止条件就是n=1
     * @param n
     * @return
     */
    public String countAndSay(int n) {
        //递归终止条件
        if (n==1) return "1";
        //用来装结果集
        StringBuilder result=new StringBuilder();
        //找到第n-1个字符串
        String lastStr=countAndSay(n-1);//这里就会一直递归

        //遍历lastStr进行输出

        //拿出第一个值
        char cur=lastStr.charAt(0);
        //记录相同字母的数字
        int count=0;
        for (int i = 0; i < lastStr.length(); i++) {
            if (lastStr.charAt(i)==cur){
                count++;
            }else {
                //将前面相同的值放到结果集中
                result.append(count);
                result.append(cur);
                //从新设置cur和count的值
                cur=lastStr.charAt(i);
                count=1;
            }
            //判断是否是最后一个元素
            if (i==lastStr.length()-1){
                result.append(count);
                result.append(cur);
            }
        }
        return result.toString();
    }

}